const utils = require('./utils');
// 定义文件存储路径
let htmPath = getApp().fileBasePath;

/**
 * 浏览文件集合
 * 默认浏览 htmPath 下的目录,可传第二参数，访问具体文件目录
 * @param { String } catalogue 文件目录
 */
export function getFileDirectory(catalogue) {
	return new Promise((resolve) => {
		let fileSystemManager = wx.getFileSystemManager();
		fileSystemManager.readdir({
			dirPath: catalogue ? htmPath + catalogue : htmPath,
			success(res) {
				console.log('文件夹：', res);
				resolve({
						filesList: res.files
					});
			},
			fail(err) {
				console.log(err);
				resolve({
					errno: 10000,
					errMsg: err
				});
			}
		})
	})
}

/**
 * 判断文件/目录是否存在
 * @param { String } path 传入的路径
 */
export function accessFile(path){
	return new Promise((resolve) => {
		if(!path){
			resolve({
				errno:9999,
				errMsg:'参数值为空'
			})
			return
		}
		let fileSystemManager = wx.getFileSystemManager();
		fileSystemManager.access({
			path: `${htmPath}/${path}`,
			success(res) {
				// 文件存在
				console.log("文件存在",res);
				resolve(res.errMsg)
			},
			fail(err) {
				// 文件不存在或其他错误
				console.error(err)
				resolve({
					errno: 10000,
					...err
				})
			}
		})
	})
}

/**
 * 创建目录
 * @param { String } path 传入的路径
 */
export function mkdirFile(path){
	return new Promise((resolve) => {
		let fileSystemManager = wx.getFileSystemManager();
		fileSystemManager.mkdir({
			dirPath: `${htmPath}/${path}`,
			recursive: true,
			success(res) {
				console.log(res);
				resolve(res.errMsg)
			},
			fail(err) {
				console.log(err);
				resolve({
					errno: err.errno || 10000,
					errMsg: err.errMsg
				})
			}
		})
	})
}

/**
 * 删除文件
 * @param { String } pathName 传入的文件名
 */
export function deleteFile(pathName){
	return new Promise((resolve) => {
		let fileSystemManager = wx.getFileSystemManager();
		fileSystemManager.unlink({
			filePath: `${htmPath}/${pathName}`,
			success(res) {
				resolve(res.errMsg)
			},
			fail(err) {
				resolve({
					errno: err.errno || 10000,
					errMsg: err.errMsg
				})
			}
		})
	})
}

/**
 * 获取文件信息
 * @param { String } pathName 传入的文件名
 */
export function getFileInfo(pathName){
	return new Promise((resolve) => {
		let fileSystemManager = wx.getFileSystemManager();
		fileSystemManager.open({
			filePath: `${htmPath}/${pathName}`,
			success(res) {
				// 获取文件的状态信息
				fileSystemManager.fstat({
					fd: res.fd,
					success(res) {
						resolve(res.stats)
					}
				})
			},
			fail(err) {
				resolve({
					errno: err.errno || 10000,
					errMsg: err.errMsg
				})
			}
		})
	})
}

/**
 * 解压文件
 * @param { String } targetPath 目标路径
 * @param { String } filePath 待解压文件路径
 */
// export function uncompressFile(targetPath,filePath){
// 	console.log(targetPath,filePath);
// 	return new Promise((resolve) => {
// 		let fileSystemManager = wx.getFileSystemManager();
// 		fileSystemManager.unzip({
// 			zipFilePath: `${htmPath}/${filePath}`,
//   		targetPath: `${htmPath}`,
// 			success(res) {
// 				resolve(res.errMsg)
// 			},
// 			fail(err) {
// 				resolve({
// 					errno: err.errno || 10000,
// 					errMsg: err.errMsg
// 				})
// 			}
// 		})
// 	})
// }

/**
 * 打开文件
 * 先校验文件名称是否符合打开规则
 * 图片使用图片预览,文件使用open,其他返回无法打开
 * @param {*} fileName  文件名称
 */
export function previewFile(	) {
	return new Promise(resolve => {
		const fileType = utils.getFileName(fileName).fileType;
		const isFile = ['doc', 'docx', 'pdf', 'pptx', 'ppt', 'xlsx', 'xls'].includes(fileType);
		const isImage = ['jpg', 'png'].includes(fileType);
		if (!isFile && !isImage) {
			wx.showToast({
				title: '不支持的文件类型',
				icon: 'none'
			})
			wx.navigateBack();
		} else if (isFile) {
			wx.showLoading({
				title: '文件正在打开',
			})
			wx.openDocument({
				filePath: `${htmPath}/${fileName}`,
				showMenu: true,
				success: function (res) {
					console.log('预览成功：', res);
					resolve('成功')
					wx.hideLoading();
				},
				fail: (error) => {
					console.log('预览失败：', error);
					wx.showToast({
						title: error,
						icon: 'error'
					})
				}
			})
		} else if (isImage) {
			// 打开图片 注：打开的图片文件不能包含特殊字符，否则会一直转圈
			wx.previewImage({
				urls: Array.isArray(fileName) ? fileName : [`${htmPath}/${fileName}`],
				success(res) {
					resolve(res.errMsg)
				},
				fail(err) {
					console.log(err);
					resolve({
						errno: err.errno || 10000,
						errMsg: err.errMsg
					})
				}
			})
		}
	})
}
